matlab解决差分演化算法多元函数最优化问题! |
您所在的位置:网站首页 › java 差分算法 › matlab解决差分演化算法多元函数最优化问题! |
差分演化算法是一种基于全局最优的算法,它可以应用到我们的多目标、粒子滤波器、工程等问题。对于刚基础差分演化算法来说,自己要首先根据算法原理写出解决一元函数的最优化问题,再次写出解决多元函数的代码,只要能把这两部分的代码弄清楚了,那么对于改进差分演化算法和差分演化算法的应用问题将会轻松许多。 对于算法的学习推荐下面几本书! 差分演化算法的代码最重要的是对于最优值保存这里,设置最优值让其等于一个初始值的第一个位置,之后不断从其中选取最优值,依此下去就可以得到最优值。下面是采用matlab写的差分演化算法应用在多元函数上的最优化代码。 程序: function f=fun_DE1(x) for i=1:2 %这里的i是1:Np. f=0; f=f+x(:,i).*2.^(i-1); end clc clear % DE算法应用---多元函数 %需求:DE算法求解多维函数--以超椭球题函数f(x)=sum(x(i)*2^(i-1)),i=1,2,... %求解超椭球体函数的最优值---最大值/最小值 %matlab与java写的程序,所要的评价次数来说,matlab需要的更多 %时间:2020.12.18 D=50;%群体个数 Np=2;%所求的变量个数,这里相当于个体数,根据自己的需要调整个体数 xmin=-1; xmax=2; K=300; %迭代次数 F=0.5; %变异因子[0 2] Cr=0.8; %交叉因子[0.6 0.9] %第一步 初始化种群 x=xmin+(xmax-xmin)*rand(D,Np); for i=1:Np best(1,i)=x(1,i);%全局最优个体 ---之后不断更新 end for i=2:D if(fun_DE1(x(i,:))>fun_DE1(best(1,:))) %编写函数有问题,下去思考 best(1,:)=x(i,:); end end fi=fun_DE1(best); %保证个体全局最优 %%进入循环直到满足精度要求或者迭代次数达到 for n=1:K %做迭代 time(n)=n; %第二步 变异 for i=1:D for j=1:Np %检查是否越界 r1=1;r2=1;r3=1;%使得个体满足变异条件.此处与Java有点不一样,他是从1开始 while(r1==r2||r1==r3||r2==r3||r1==i||r2==i||r3==i) r1=ceil(D*rand(1)); %保持其中的r1,r2,r3互异,这样做的目的是为了防止种群的单一性 r2=ceil(D*rand(1)); r3=ceil(D*rand(1)); end v(i,j)=x(r1,j)+F*(x(r2,j)-x(r3,j)); %做一个防止越界 if v(i,j)xmax x(i,j)=xmax; end end %交叉 for j=1:Np temper=rand(1); %随机产生一个数,用于进行多点交叉 if(temperfun_DE1(x(i,:))) x(i,:)=u(i,:); end if(fun_DE1(x(i,:))> ![]() 以上就是matlab的差分演化算法求解多元函数最优化问题的代码,如果有想要用java的差分演化算法求解多元目标函数的代码的私信! 其实只要能把多元函数的代码写出,那么一元的就出来了,只需要把对应的种群个体数改为1即可! 只需0.01元,点击下方获取编程资料! 欢迎关注知乎,留言交流! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |